About Git

1. Git (Version Control System) 에 λŒ€ν•΄

μ—¬λŸ¬ μ‚¬λžŒλ“€μ΄ ν•˜λ‚˜μ˜ νŒŒμΌμ„ λ‹€λ£° λ•Œ μ‚¬μš©ν•˜κ³  파일의 변경사항을 좔적할 수 있고, 이전 λ²„μ „μ˜ 파일 확인이 κ°€λŠ₯ν•˜λ‹€.

λ‚ μ§œλ³„λ‘œ μ–΄λ–€ μ‹μœΌλ‘œ 무슨 λ‚΄μš©μœΌλ‘œ 변경이 λ˜μ—ˆλŠ”μ§€ 좔적 κ°€λŠ₯ν•˜λ‹€.

비ꡐ!. Git κ³Ό Github 의 차이

  • Github : git 을 μ‚¬μš©ν•˜λŠ” μ‚¬λžŒλ“€μ΄ λͺ¨μΈ social media, platform 이닀.

Repository (μ½”λ“œ μ €μž₯μ†Œ) λ₯Ό μ„œλ‘œ 곡유 κ°€λŠ₯ν•œ ν”Œλž«νΌμ΄λ‹€. μ—¬κΈ°μ„œ μ˜€ν”ˆμ†ŒμŠ€ (facebook/react) 같은 것을 λ‚΄ 둜컬둜 κ°€μ Έμ™€μ„œ μž‘μ—…ν•΄ λ³Ό μˆ˜λ„ μžˆλ‹€. ν˜‘μ—…μ„ κ°€λŠ₯ν•˜κ²Œ ν•΄ μ€€λ‹€.

  • Git : 버전 관리 μ‹œμŠ€ν…œ 자체
  • μ°Έκ³ ν•  λ§Œν•œ μ‚¬μ΄νŠΈ

https://www.zerocho.com/category/Git/post/58045dbc146be6001542a465

2. Git 의 λΆ„μ‚° μ‹œμŠ€ν…œμ— λŒ€ν•΄

feature flow

2-1. κΉƒν—™μ˜ (μ˜€ν”ˆμ†ŒμŠ€ λ“±λ“±) 레포 ν•˜λ‚˜λ₯Ό λ‚΄ κΉƒν—ˆλΈŒ κ³„μ •μœΌλ‘œ λ³΅μ‚¬ν•˜λŠ” fork

fork

2-2. λ‚΄ 둜컬 μ»΄ν“¨ν„°λ‘œ (local repository) κ°€μ Έμ˜€λŠ” clone

fork 둜 λ‚΄ github κ³„μ •μœΌλ‘œ repo λ₯Ό 가져왔어도 κΉƒν—™ remote repo μ—μ„œλŠ” λ‚΄κ°€ μ†ŒμŠ€μ½”λ“œλ₯Ό μˆ˜μ •ν•  수 μ—†λ‹€.

이제 이λ₯Ό λ‚΄ 둜컬의 μ»΄ν“¨ν„°λ‘œ κ°€μ €μ˜€λŠ” 과정을 거치게 ν•˜λŠ” 것이 λ°”λ‘œ clone 이닀.

λ‚΄κ°€ 주인이 λ˜μ–΄μ„œ 직접 μˆ˜μ •μ΄ κ°€λŠ₯ν•΄ 진닀.

clone 을 톡해 가져와 μž‘μ—…μ„ ν•œ λ’€ remote repository 에 올리고 κ·Έκ±Έ maintainer μ—κ²Œ λ³€κ²½λœ μ†ŒμŠ€μ— λŒ€ν•œ 검사λ₯Ό λ°›κ³  적용이 λ˜λŠ” 흐름이라고 ν•œλ‹€.

2-3. λ‚΄ local repo 의 변경사항을 β€œλ‚΄ μ†Œμœ μ˜ (Origin)” repository 에 μ €μž₯ 적용이 κ°€λŠ₯ν•œ git push origin master

2-4. git pull origin master

pull

λ§Œμ•½ λˆ„κ΅°κ°€μ™€ ν•¨κ»˜ μ–΄λ–€ μ €μž₯μ†Œμ— λŒ€ν•œ λ‚΄μš©μ„ μž‘μ—…ν•˜λŠ”λ°, μƒλŒ€λ°©μ΄ 변경사항을 λ¨Όμ € μΆ”κ°€ν–ˆλ‹€λ©΄?

이제 λ‚΄κ°€ κ·Έ λ³€κ²½λœ 사항을 μ»΄ν“¨ν„°λ‘œ 받아와야 ν•œλ‹€.

μ™œλƒλ©΄ κ·Έ λ³€κ²½ 사항을 ν¬ν•¨ν•œ λ‚΄μš©μ„ 가지고 ν•¨κ»˜ μž‘μ—… ν•΄μ•Ό ν•˜λ‹ˆκΉŒ 인거 κ°™λ‹€.

즉, remote repo 의 변경사항을 λ‚΄ 컴퓨터에 μ μš©μ‹œν‚€κ³ μž ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

λ§Œμ•½, κ·Έ repo 의 원쑰λ₯Ό μ»¨νŠΈλ‘€ν•˜λŠ” maintainer κ°€ repo 의 λ‚΄μš©μ„ λ³€κ²½ν–ˆλ‹€λ©΄?

2-5. git pull upstream master

upstream

  • from upstream : local repo μž…μž₯μ—μ„œ 바라본 원본 repo λ₯Ό μ˜λ―Έν•œλ‹€κ³  ν•œλ‹€.
  • git remote add upstream 등둝을 ν•΄μ€˜μ•Ό ν•œλ‹€κ³  ν•œλ‹€.
  • 잘 이해가 λ˜μ§€ μ•ŠλŠ”λ‹€. λ³€κ²½λ˜μ—ˆλ‹€ ν•  λ•Œλ§ˆλ‹€ fork 둜 κ°€μ Έμ˜€κ±°λ‚˜ ν•˜λ©΄ μ•ˆλ˜λŠ” κ²ƒμΌκΉŒ?

upstream2

2-6. git fetch, git merge

  • git fetch 와 git merge λ₯Ό ν•©μΉœ 것이 git pull 이라고 ν•œλ‹€.
  • git pull 은 working directory λ₯Ό μ΅œμ‹ ν™”, μ—…λ°μ΄νŠΈ ν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€.

3. git 을 μ΄μš©ν•œ μž‘μ—… 흐름

μ°Έκ³  μ‚¬μ΄νŠΈ : https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88

Git λ””λ ‰ν† λ¦¬λŠ” Git이 ν”„λ‘œμ νŠΈμ˜ 메타데이터와 객체 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ €μž₯ν•˜λŠ” 곳을 λ§ν•œλ‹€. 이 Git 디렉토리가 Git의 핡심이닀. λ‹€λ₯Έ 컴퓨터에 μžˆλŠ” μ €μž₯μ†Œλ₯Ό Clone ν•  λ•Œ Git 디렉토리가 λ§Œλ“€μ–΄μ§„λ‹€.

μ›Œν‚Ή νŠΈλ¦¬λŠ” ν”„λ‘œμ νŠΈμ˜ νŠΉμ • 버전을 Checkout ν•œ 것이닀. Git λ””λ ‰ν† λ¦¬λŠ” μ§€κΈˆ μž‘μ—…ν•˜λŠ” λ””μŠ€ν¬μ— 있고 κ·Έ 디렉토리 μ•ˆμ— μ••μΆ•λœ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ νŒŒμΌμ„ κ°€μ Έμ™€μ„œ μ›Œν‚Ή 트리λ₯Ό λ§Œλ“ λ‹€.

Staging AreaλŠ” Git 디렉토리에 μžˆλ‹€. λ‹¨μˆœν•œ 파일이고 곧 컀밋할 νŒŒμΌμ— λŒ€ν•œ 정보λ₯Ό μ €μž₯ν•œλ‹€. Gitμ—μ„œλŠ” κΈ°μˆ μš©μ–΄λ‘œλŠ” β€œIndex” 라고 ν•˜μ§€λ§Œ, β€œStaging Area” λΌλŠ” μš©μ–΄λ₯Ό 써도 상관 μ—†λ‹€.

Git으둜 ν•˜λŠ” 일은 기본적으둜 μ•„λž˜μ™€ κ°™λ‹€.

  • μ›Œν‚Ή νŠΈλ¦¬μ—μ„œ νŒŒμΌμ„ μˆ˜μ •ν•œλ‹€.
  • Staging Area에 νŒŒμΌμ„ Stage ν•΄μ„œ 컀밋할 μŠ€λƒ…μƒ·μ„ λ§Œλ“ λ‹€. λͺ¨λ“  νŒŒμΌμ„ μΆ”κ°€ν•  μˆ˜λ„ 있고 μ„ νƒν•˜μ—¬ μΆ”κ°€ν•  μˆ˜λ„ μžˆλ‹€.
  • Staging Area에 μžˆλŠ” νŒŒμΌλ“€μ„ μ»€λ°‹ν•΄μ„œ Git 디렉토리에 영ꡬ적인 μŠ€λƒ…μƒ·μœΌλ‘œ μ €μž₯ν•œλ‹€.

3-1. git add

staging area 에 파일 μΆ”κ°€ν•˜κΈ°

μ™œλƒλ©΄ μˆ˜μ •ν•œ λ‚΄μš©μ„ git 에 μ˜ν•œ 관리λ₯Ό λ°›κ²Œ ν•˜κΈ° μœ„ν•΄μ„œ 이닀.

1. git add .
2. git add index.html

이 λ‘˜ μ‚¬μ΄μ—λŠ” 큰 차이가 μžˆλ‹€
1 은 깃에 μ˜ν•΄ 컨트둀 λ˜λŠ” λͺ¨λ“  μ‚¬ν•­μ—μ„œ μˆ˜μ •μ‚¬ν•­μ„ μ „λΆ€ λ“±λ‘ν•œλ‹€λŠ” 의미 이닀.
2 λŠ” index.html 을 콕 μ°μ–΄μ„œ staging area 에 μΆ”κ°€ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€.

3-2. git commit

μŠ€λƒ…μƒ· ν•˜λ‚˜ν•˜λ‚˜λ₯Ό λ§Œλ“œλŠ” 것을 μ˜λ―Έν•œλ‹€. λ°˜λ“œμ‹œ 컀밋 λ©”μ‹œμ§€λ₯Ό 잘 적어 μ€˜μ•Ό μ–΄λ–€ λ‚΄μš©μ΄ λ³€κ²½ λ˜μ—ˆλŠ”μ§€ ν•œ λˆˆμ— ν™•μΈν•˜κΈ°μ— μ’‹λ‹€κ³  ν•œλ‹€.

git commit -m "commit message"

3-3. Branching and Merging

  • Branching : master μ—μ„œ λ»—μ–΄λ‚˜μ™€ 가지λ₯Ό μƒˆλ‘œ μΉ˜λŠ” 것을 의미
  • Merging : μ—¬λŸ¬ 가지 (branch) 듀을 ν•˜λ‚˜λ‘œ ν•©μΉ˜λŠ” 것을 의미

μ•„λž˜ κ·Έλ¦Ό 처럼 동그라미 ν•˜λ‚˜ ν•˜λ‚˜κ°€ 컀밋을 μ˜λ―Έν•œλ‹€.

gitworkflow

μ—¬κΈ°μ—μ„œ,

  • master
  • develop branch : μΆ©λΆ„ν•œ ν…ŒμŠ€νŠΈμ™€ μˆ˜μ •μ‚¬ν•­μ„ 거친 λ’€ master 에 올리기 μœ„ν•œ branch 이닀.
  • feature branch : ν•˜λ‚˜ν•˜λ‚˜μ˜ κΈ°λŠ₯을 λ‹΄κ³  μžˆλŠ”, 예둜 λ§ˆλ²•μ‚¬ μΊλ¦­ν„°μ˜ κΈ°λŠ₯을 처음 λ§Œλ“œλŠ” μž‘μ—…μ„ μ§„ν–‰ν•˜λŠ” branch 이닀.

에 λŒ€ν•œ 이해가 μ€‘μš”ν•œ κ±° κ°™λ‹€. feature μ—μ„œ master 둜 올라갈 수둝 μ•ˆμ •μ„±μ΄ 쒋아진닀.


Written by@[DotoriMook]
ν”„λ‘ νŠΈμ—”λ“œ μ£Όλ‹ˆμ–΄ 개발자 λ„ν† λ¦¬λ¬΅μ˜ 기술개발 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

GitHubMediumTwitterFacebook